package com.xuanyuanxinyu.view

import android.view.GestureDetector.SimpleOnGestureListener
import android.view.MotionEvent
import com.xuanyuanxinyu.utils.log.AppLog

class CustomGestureListener : SimpleOnGestureListener() {
    /**
     * 当触发它的向下MotionEvent发生点击时，会发出通知。每次向下事件都会立即触发。所有其他事件都应在此之前进行。参数：e–向下运动事件。
     */
    override fun onDown(e : MotionEvent) : Boolean {
        // 必须返回true，以确保后续事件能被正确处理
        AppLog.logDeviceError(CustomGestureListener::class.java,AppLog.GROUP_VIEW,"自定义手势监控 ")
        return true
    }
    
    /**
     * 用户已执行向下MotionEvent，但尚未执行移动或向上移动。此事件通常用于向用户提供视觉反馈，让他们知道他们的动作已被识别，即突出显示一个元素。
     * 已已按下但还未移动
     */
    override fun onShowPress(e : MotionEvent) {
        super.onShowPress(e)
    }
    
    /**
     *
     * 当触发它的向上MotionEvent发生点击时，会发出通知。
     * @return  是否消费该事件
     */
    override fun onSingleTapUp(e : MotionEvent) : Boolean {
        return super.onSingleTapUp(e)
    }
    
    /**
     * 滑动事件
     * 当滚动发生时，通知初始的向下移动MotionEvent和当前的移动MotionEvent。为了方便起见，还提供了x和y中的距离。
     *
     * @param e1 The first down motion event that started the scrolling. A `null` event
     * indicates an incomplete event stream or error state.
     * @param e2 The move motion event that triggered the current onScroll.
     * @param distanceX The distance along the X axis that has been scrolled since the last
     * call to onScroll. This is NOT the distance between `e1`
     * and `e2`.
     * @param distanceY The distance along the Y axis that has been scrolled since the last
     * call to onScroll. This is NOT the distance between `e1`
     * and `e2`.
     * @return  事件是否已被消费
     */
    override fun onScroll(
        e1 : MotionEvent?,
        e2 : MotionEvent,
        distanceX : Float,
        distanceY : Float
    ) : Boolean {
        return super.onScroll(e1,e2,distanceX,distanceY)
    }
    
    /**
     * 长按事件
     */
    override fun onLongPress(e : MotionEvent) {
        super.onLongPress(e)
    }
    
    /**
     * 当初始的向下MotionEvent和匹配的向上MotionEvent发生时，会通知一个投掷事件。计算出的速度以像素每秒为单位沿x和y轴提供。
     * @param e1 The first down motion event that started the fling. A `null` event
     * indicates an incomplete event stream or error state.
     * @param e2 The move motion event that triggered the current onFling.
     * @param velocityX The velocity of this fling measured in pixels per second
     * along the x axis.
     * @param velocityY The velocity of this fling measured in pixels per second
     * along the y axis.
     * @return
     */
    override fun onFling(
        e1 : MotionEvent?,
        e2 : MotionEvent,
        velocityX : Float,
        velocityY : Float
    ) : Boolean {
        // 处理滑动事件
        return true
    }
    
    /**
     * 当发生上下文单击时通知。
     */
    override fun onContextClick(e : MotionEvent) : Boolean {
        return super.onContextClick(e)
    }
    
    /**
     * 当发生一次点击时发出通知。与手势检测器不同。OnGestureListener。onSingleTapUp（MotionEvent），只有在检测器确信用户的第一次点击后没有第二次点击导致双击手势后，才会调用此功能。
     *
     * @param e The down motion event of the single-tap.
     */
    override fun onSingleTapConfirmed(e : MotionEvent) : Boolean {
        return super.onSingleTapConfirmed(e)
    }
    
    /**
     * 双击发生时通知。在第二次点击向下事件时触发。
     * @param e The down motion event of the first tap of the double-tap.
     */
    override fun onDoubleTap(e : MotionEvent) : Boolean {
        return super.onDoubleTap(e)
    }
    
    /**
     * 当双击手势中的事件发生时发出通知，包括向下、移动和向上事件。
     * @param e The motion event that occurred during the double-tap gesture.
     */
    override fun onDoubleTapEvent(e : MotionEvent) : Boolean {
        return super.onDoubleTapEvent(e)
    } // 实现其他方法以处理不同的手势，如onLongPress, onScroll等
}
